﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ProyectoAlmacen.Dominio;
using System.Data.SqlClient;

namespace ProyectoAlmacen.Persistencia
{
    public class MaterialDAO
    {

        public Material Crear(Material materialACrear)
        {
            Material materialCreado = null;
            string sql = "Insert into Material VALUES (@idMaterial, @Descripcion, @Estado, @idUsuario)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {

                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    com.Parameters.Add(new SqlParameter("@idMaterial", materialACrear.idMaterial));
                    com.Parameters.Add(new SqlParameter("@Descripcion", materialACrear.Descripcion));
                    com.Parameters.Add(new SqlParameter("@Estado", materialACrear.Estado));
                    com.Parameters.Add(new SqlParameter("@idUsuario", materialACrear.idUsuario));
                    com.ExecuteNonQuery();

                }

            }
            materialCreado = Obtener(materialACrear.idMaterial.ToString());
            return materialCreado;

        }

        public Material Obtener(string idMaterial)
        {

            Material materialEncontrado = null;
            string sql = "Select * from Material where idMaterial=@idMaterial";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idMaterial", idMaterial));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            materialEncontrado = new Material()
                            {

                                idMaterial = (int)resultado["idMaterial"],
                                Descripcion = (string)resultado["Descripcion"],
                                Estado = (int)resultado["Estado"],
                                idUsuario = (int)resultado["idUsuario"]
                                

                            };

                        }

                    }

                }


            }
            return materialEncontrado;

        }

        public ICollection<Material> ListarTodos()
        {
            ICollection<Material> ListaMaterial = new List<Material>();
            string sql = "Select * from Material";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            Material materialEncontrado = new Material();
                            
                                materialEncontrado.idMaterial = (int)resultado["idMaterial"];
                                materialEncontrado.Descripcion = (string)resultado["Descripcion"];
                                materialEncontrado.Estado = (int)resultado["Estado"];
                                materialEncontrado.idUsuario = (int)resultado["idUsuario"];
                                ListaMaterial.Add(materialEncontrado);

                        }

                    }

                }


            }
            return ListaMaterial;

        }

        public Material BuscarRepetido(string Descripcion)
        {

            Material materialEncontrado = null;
            string sql = "Select * from Material where Descripcion=@Descripcion";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@Descripcion", Descripcion));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            materialEncontrado = new Material()
                            {

                                idMaterial = (int)resultado["idMaterial"],
                                Descripcion = (string)resultado["Descripcion"],
                                Estado = (int)resultado["Estado"],
                                idUsuario = (int)resultado["idUsuario"]


                            };

                        }

                    }

                }


            }
            return materialEncontrado;

        }

        public Material Modificar(Material materialAModificar)
        {
            Material materialModificado = null;
            string sql = "Update Material set Descripcion=@descripcion, Estado=@estado, idUsuario=@idUsuario where idMaterial=@idMaterial";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {

                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    com.Parameters.Add(new SqlParameter("@idMaterial", materialAModificar.idMaterial));
                    com.Parameters.Add(new SqlParameter("@descripcion", materialAModificar.Descripcion));
                    com.Parameters.Add(new SqlParameter("@estado", materialAModificar.Estado));
                    com.Parameters.Add(new SqlParameter("@idUsuario", materialAModificar.idUsuario));
                    com.ExecuteNonQuery();

                }

            }
            materialModificado = Obtener(materialAModificar.idMaterial.ToString());
            return materialModificado;

        }

        public void Eliminar(string idMaterial)
        {
            string sql = "Delete from Material where idMaterial=@idMaterial";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {

                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    com.Parameters.Add(new SqlParameter("@idMaterial", idMaterial));
                    com.ExecuteNonQuery();

                }

            }

        }
    }
}